I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Fabryka abstrakcyjna - Abstract Factory - wzorzec projektowy - java

1. Cel:
Fabryka abstrakcyjna to kreacyjny wzorzec projektowy, który pozwala tworzyć rodziny powiązanych obiektów
bez określania ich konkretnych klas.
Jest to implementacja fabryki która jest fabryką.

2. Problem:
Wyobraź sobie że tworzysz symulator sklepu meblowego. Generujesz zestawy meblowe które mają te same elementy,
tylko innego stylu takie jak: szafa, komoda, łóżko itp.

3. Rozwiązanie:

Abstrakcyjna fabryka wyraźnie sugeruje implementowanie interface-u dla każdego odrębnego produktu.
Następnie robisz każdy wariant produktu zgodnego inteface-em.

4. Diagram klas wzorca Fabryka abstrakcyjna:


5. Implementacja:
Pierwszą czynnością jest tworzenie interface-u naszej abstrakcyjnej fabryki.
  1. public interface FabrykaMebli {
  2.         Szafa stworzSzafe();
  3.         Komoda stworzKomode();
  4.         Lozko stworzLozko();
  5. }
Następnie tworzenie inteface-ów naszych produktów:
  1.  
  2. public interface Szafa {
  3.         String getWymiar();
  4. }
  5. public interface Komoda {
  6.         int getPolki();
  7. }
  8. public interface Lozko {
  9.         int getSzerokosc();
  10. }
  11.  
Kolejną cznnością jest już implementowanie konkretnej fabryki,
implementującej abstrakcyjną fabrykę.
  1. public class AntyczneMebleFactory implements FabrykaMebli {
  2.         public Szafa stworzSzafe() {
  3.                 return new AntycznaSzafa();
  4.         }
  5.         public Komoda stworzKomode() {
  6.                 return new AntycznaKomoda();
  7.                
  8.         }
  9.         public Lozko stworzLozko() {
  10.                 return new AntyczneLozko();
  11.         }
  12. }
  13.  
oraz konkretne produkty.
  1. public class AntycznaSzafa implements Szafa {
  2.         public String getWymiar() {
  3.                 return "80x60x200";
  4.         }
  5. }
  6.  
  7. public class AntycznaKomoda implements Komoda {
  8.         public int getPolki() {
  9.                 return 6;
  10.         }
  11. }
  12.  
  13. public class AntyczneLozko implements Lozko {
  14.         public int getSzerokosc() {
  15.                 return 220;
  16.         }
  17. }
  18.  
Druga konkretna implementacja fabryki abstrakcyjnej. Oraz jej produktów:
  1. public class NowoczesneMebleFactory implements FabrykaMebli {
  2.         public Szafa stworzSzafe() {
  3.                 return new NowoczesnaSzafa();
  4.         }
  5.         public Komoda stworzKomode() {
  6.                 return new NowoczesnaKomoda();
  7.                
  8.         }
  9.         public Lozko stworzLozko() {
  10.                 return new NowoczesnaLozko();
  11.         }
  12. }
  13.  
  14.  
  15. public class NowoczesnaSzafa implements Szafa {
  16.         public String getWymiar() {
  17.                 return "60x60x180";
  18.         }
  19. }
  20.  
  21. public class NowoczesnaKomoda implements Komoda {
  22.         public int getPolki() {
  23.                 return 5;
  24.         }
  25. }
  26.  
  27. public class NowoczesnaLozko implements Lozko {
  28.         public int getSzerokosc() {
  29.                 return 200;
  30.         }
  31. }
  32.  
Klasa służąca do wyboru konkretnej fabryki abstrakcyjnej:
  1. public class Factory {
  2.         public static FabrykaMebli getTypMebli(String typMebli) {
  3.                 switch(typMebli) {
  4.                         case "Antyczne":
  5.                                 return new AntyczneMebleFactory();
  6.                         case "Nowoczesne":
  7.                                 return new NowoczesneMebleFactory();
  8.                         default:
  9.                                 return null;
  10.                 }
  11.         }
  12.         public static void main(String[] args){
  13.                 FabrykaMebli antyczneMeble = getTypMebli("Antyczne");
  14.                 Szafa szafaAntyczna = antyczneMeble.getSzafa();
  15.                 System.out.println("Wymiar szafy antycznej:" + szafaAntyczna.getWymiar());
  16.         }
  17. }
  18.  
6. Zastosowanie w kodzie java:

- javax.xml.parsers.DocumentBuilderFactory#newInstance()
- javax.xml.transform.TransformerFactory#newInstance()
- javax.xml.xpath.XPathFactory#newInstance()
created by cv.java.org.pl © 2023 All Rights Reserved.